import { AstarNode } from "./Node";

/**
 * 网格
 */
export  class GridMap {
	/**
	 * 起点
	 */
	private _startNode:AstarNode;    //
	/**
	 * 终点
	 */
	private _endNode:AstarNode;      //
	/**
	 * Node数组
	 */
	private _nodes:Array<Array<AstarNode>>;  //
	/**
	 * 网格行
	 */
	private _numCols:number;    //
	/**
	 * 网格列
	 */
	private _numRows:number;
	/**
	 * 网格边缘
	 */
	public gridEdge: number = 38;
	public static instance:GridMap = new GridMap(16,24);

	public constructor(numCols:number, numRows:number) {
		this._numCols = numCols;
		this._numRows = numRows;
		this._nodes = [];

		for(let i:number=0;i<numCols;i++){
			this._nodes[i] = [];
			for(let j:number=0;j<numRows;j++){
				this._nodes[i][j] = new AstarNode(i,j);
			}
		}
		
	}
	/**
	 * 获取所有节点
	 */
	public getAllNode(){
		return this._nodes;
	}
	/**
	 * 获取指定位置的节点
	 * @param x 
	 * @param y 
	 */
	public getNode(x:number , y:number):AstarNode{
		return this._nodes[x][y];
	}
	/**
	 * 设置终点节点
	 * @param x 
	 * @param y 
	 */
	public setEndNode(x:number, y:number){
		this._endNode = this._nodes[x][y];
	}
	/**
	 * 设置开始节点
	 * @param x 
	 * @param y 
	 */
	public setStartNode(x:number, y:number){
		this._startNode = this._nodes[x][y];
	}
	/**
	 * 设置是否障碍物
	 * @param x 
	 * @param y 
	 * @param value value为true，可通过，否则不可通过
	 */
	public setWalkable(x:number, y:number, value:boolean){
		this._nodes[x][y].walkable = value;
	}
	/**
	 * 获取终点节点
	 */
	public get endNode(){
		return this._endNode;
	}
	/**
	 * 行数
	 */
	public get numCols(){
		return this._numCols;
	}
	/**
	 * 列数
	 */
	public get numRows(){
		return this._numRows;
	}
	/**
	 * 获取开始节点
	 */
	public get startNode(){
		return this._startNode;
	}
}